#ifndef __PID__
#define __PID__

#ifdef  __cplusplus
    extern "C" {
#endif



typedef struct
{
    float Kp, Ki, Kd;       // 比例、积分、微分系数
    float cur_err;          // 当前错误
    float pre_err;          // 前一个错误
    float pre2_err;         // 前两个错误

}pid_inc_t;

typedef struct
{
    float Kp, Ki, Kd;       // 比例、积分、微分系数
    float cur_err;          // 当前错误
    float pre_err;          // 前一个错误
    float locSum;           // 累计积分值
    float sum_max;          // 积分限幅上限
    float sum_min;          // 积分限幅下限
}pid_pos_t;

int pid_inc_init (pid_inc_t *pid, float kp, float ki, float kd);
float pid_inc_calculate (pid_inc_t *pid, float SetValue, float ActualValue);
int pid_pos_init (pid_pos_t *pid, float kp, float ki, float kd, float sum_max, float sum_min);
float pid_pos_calculate (pid_pos_t *pid, float SetValue, float ActualValue);

#ifdef __cplusplus
	}
#endif
#endif
